import { StateTree } from 'pinia';
import { Menu } from '@/router/types';
import { BaseStorage } from '@2/app/core/storage/base.storage';

/**
 * @program: microservice-central-portal
 * @description: 许可授权存储接口
 * @author: baiHoo.chen
 * @create: 2022年5月26日
 **/
export interface PermissionStorage extends BaseStorage<PermissionState> {
  /**
   * 获取授予用户的权限，按自然键排序（不能为 undefined）
   */
  getAuthorities(): string[];
  /**
   * 设置授予用户的权限，按自然键排序（不能为 undefined）
   * @param authorities
   */
  setAuthorities(authorities: string[]);
  /**
   * 获取后端菜单列表
   */
  getBackMenuList(): Menu[];
  /**
   * 设置后端菜单列表
   * @param menuList
   */
  setBackMenuList(menuList: Menu[]);
  /**
   * 判断是否动态添加路由
   * @returns boolean
   */
  isDynamicAddedRoute(): boolean;
  /**
   * 设置是否动态添加路由
   * @param added boolean
   */
  setDynamicAddedRoute(added: boolean);
  /**
   * 获取前端菜单列表
   */
  getFrontMenuList(): Menu[];
  /**
   * 设置前端菜单列表
   * @param menuList Menu[]
   */
  setFrontMenuList(menuList: Menu[]);
  /**
   * 获取前端菜单列表最近一次触发更新时间
   * @returns number 时间戳
   */
  getLastBuildMenuTime(): number;
  /**
   * 设置前端菜单列表最近一次触发更新时间
   */
  setLastBuildMenuTime();
}

/**
 * @program: microservice-central-portal
 * @description: 用于定义许可授权存储的所有状态，具体使用 {@see PermissionStorageImpl}
 * @author: baiHoo.chen
 * @create: 2022年5月29日
 **/
export interface PermissionState extends StateTree {
  /**
   * 授予用户的权限，按自然键排序（不能为 undefined）
   */
  authorities: string[];
  /**
   * 是否动态添加路由
   */
  dynamicAddedRoute: boolean;
  /**
   * 菜单最近一次触发更新是假
   */
  lastBuildMenuTime: number;
  /**
   * 后端菜单列表
   */
  backMenuList: Menu[];
  /**
   * 前菜单列表
   */
  frontMenuList: Menu[];
}
